home *** CD-ROM | disk | FTP | other *** search
- 10 ' Compiler Version
- 20 '
- 30 ' Change About Box with ResEdit
- ' ++++++++++++++++++++++++++++++++++++++++++++++++
- ' +++ Berechnung von elliptischen Umlaufbahnen +++
- ' +++ (DJ 1 VA) (DB2OS) +++
- ' +++ Sun Nov 29, 1987 18:12:54 +++
- ' +++ V 1.5 +++
- ' +++ Macintosh Modifikation von DJ 1 VA +++
- ' ++++++++++++++++++++++++++++++++++++++++++++++++
- 40 LIBRARY "Satellit"
- 50 ' LIBRARY for Compiler Version in RS Fork
- 60 ' INITIALISIERUNG
- 70 ' ================
- 80 '
- 90 ' CLR Toolbox required for Interpreter Version
- 100 CLEAR : CLS : RESTORE
- 103 ON ERROR GOTO 12000
- 104 Version$ = "1.5 D1"
- ref% = 0
- 106 OpenResFile "Satellit",ref%
- DIM Cursor% (33)
- LoadCursor ref%,5,Cursor%(0)
- CALL SETCURSOR (VARPTR(Cursor%(0)))
- 105 DEFSNG X-Y
- 120 DEF FNELL(X) = SQR(B^2*(1-(X^2/A^2)))
- 130 CALL TEXTFONT (1) : CALL TEXTSIZE (12): CALL TEXTFACE(1)
- 140 ULINE$ = "--------------------------------------------"
- 150 WINDOW 1,"Satellit"
- 160 CLS
- 170 LOCATE 4,6 : STR5$="E L L I P T I C A L T R A C K I N G P R O G R A M"
- DrawText STR5$
- 180 LOCATE 8,16 : STR5$="By DF1OH and DB2OS"
- DrawText STR5$
- 190 LOCATE 10,13 : STR5$="Macintosh Version by DJ1VA"
- DrawText STR5$
- 200 CALL TEXTSIZE (10)
- 210 LOCATE 14,21 : PRINT"Version "Version$
- 220 CALL TEXTSIZE (12)
- 230 LOCATE 18,16 : PRINT "<Mode> to continue.";
- 300 GOSUB MenuInit
- 400 '
- 550 ' *** M A I N P R O G R A M ***
- 555 ' ==================================
- 560 ON MENU GOSUB HandleMenu : MENU ON
- Idle: GOTO Idle
- 568 IF Key% = 5 THEN GOTO Kepler
- 570 ' $IGNORE ON
- 571 IF Key% = 8 THEN CLS: MENU RESET : END
- 572 IF Key% = 7 THEN CLS: MENU RESET : SYSTEM
- 575 ' $IGNORE OFF
- 580 IF Key% = 7 THEN CLS: MENU RESET : END
- 585 CALL TEXTSIZE (12) : CALL TEXTFACE (0)
- 590 DEFDBL A-W
- 600 DEFDBL Z
- 610 PI=3.14159265#:PI180=PI/180:PI081=180/PI:PI05=PI/2:PI2=2*PI
- 620 DEF FNASN (X)=ATN(X/SQR(1D-38-(ABS(X)<1)*(1-X*X)))
- 630 RE=6378
- 640 CLS : PRINT : PRINT "Station Location: " : PRINT
- 650 STATION.LON=-11.2
- 660 STATION.LAT=48.5
- 670 PRINT "Longitude ";
- 675 PRINT USING "###.##"; STATION.LON;
- 677 PRINT " Degrees"
- 680 PRINT "Latitude ";
- 685 PRINT USING "###.##"; STATION.LAT;
- 687 PRINT " Degrees"
- 690 PRINT:PRINT ULINE$
- 700 GOSUB NewLocation
- 710 '
- 720 IF (Key$ = "Y" OR Key$ = "y" )THEN 730 ELSE 750
- 730 INPUT" New Longitude : ",STATION.LON
- 740 INPUT" New Latitude : ",STATION.LAT
- 750 STATION.LON=STATION.LON*PI180
- 760 STATION.LAT=STATION.LAT*PI180
- 770 SIN.STATION.LAT=SIN(STATION.LAT)
- 780 COS.STATION.LAT=COS(STATION.LAT)
- 790 '
- 800 ' *** SATELLITEN-DATEN ***
- 805 ' ===============================
- 810 file$=FILES$(1,"PARA")
- 820 CLS
- 840 OPEN"I",#1,file$
- 850 INPUT#1,NA$,DATUM$,EPOCH.TIME,EPOCH.REV,INCLINATION,RA.OF.NODE,ECCENTRICITY,ARG.OF.PERIGEE,MEAN.ANOMALY,MEAN.MOTION,DECAY.RATE
- 860 INCLINATION=INCLINATION*PI180
- 870 SIN.INCLINATION=SIN(INCLINATION)
- 880 COS.INCLINATION=COS(INCLINATION)
- 890 GOSUB 6500 : T0=X : ' DATE STRING
- 900 CLOSE #1: CALL SETCURSOR (VARPTR(Cursor%(0)))
- 901 IF RIGHT$(file$,4)=".PAR" THEN file$= LEFT$(file$,(LEN(file$)-4))
- 905 WINDOW 1,NA$
- 910 PRINT"Current date (dd.mm.yy): ";
- 915 GOSUB EnterDate
- 918 PRINT DATUM$
- 920 PRINT ULINE$
- 930 PRINT"Time (UTC) (hhmm): ";
- 925 GOSUB EnterTime
- 938 PRINT U$
- 940 PRINT ULINE$
- 950 UH=VAL(LEFT$(U$,2)) : UM=VAL(RIGHT$(U$,2))
- 960 IF Key%=1 THEN 990
- 970 PRINT "Steprate (min) : ";
- 975 GOSUB EnterSteprate
- 980 PRINT I% : PRINT ULINE$
- 990 CALL TEXTSIZE (9)
- IF Key% = 1 OR Key% = 2 THEN
- GOTO CalcStep
- ELSEIF Key% = 3 THEN
- GOTO DiskData
- ELSEIF Key% = 4 THEN
- GOTO AzEl
- ELSE
- GOTO 568
- END IF
-
- AzEl:
- 1010 ' *** MASK FOR AZ - EL PROJECTION ***
- 1020 ' =======================================
- 1030 CLS : PRINT "- [60]"
- 1060 LINE (7,5) - (7,273)
- 1070 LOCATE 23,2
- 1080 LINE (7,273) - (475,273)
- 1105 GOSUB Scale
- 1106 PRINT
- 1110 PRINT"[0]"; TAB (19); "[90]";TAB (38) ; "[180]"; TAB (58); "[270]"; TAB(77); "[360]";
- 1115 PRINT TAB(7);"TIME:";TAB(20);"UTC";TAB(28);"AZ=";TAB(36);"Deg.";TAB(45);"EL=";TAB(52);"Deg.";TAB(58);"DX=" ;TAB(68);"Km";
- 1120 LOCATE 1,7 :PRINT NA$
- 1130 LOCATE 1,16 :PRINT"on";
- 1135 LOCATE 2, 7 :PRINT"Orbit #:"
- 1140 LOCATE 3, 7 :PRINT"Steprate:" I%" min"
- 1150 LOCATE 1,71 : PRINT "[Degrees]";
- 1160 GOTO 1750
-
- CalcStep:
- 1180 ' *** MASK FOR REALTIME AND STEP ***
- 1190 ' ====================================
- 1200 CALL TEXTSIZE (9)
- 1205 CLS : PRINT" Any Key to interrupt."
- 1208 PRINT"_______________________________________________"
- 1210 PRINT TAB(5);NA$;TAB(15);"on"
- 1220 PRINT TAB(10);"Orbit #"
- 1230 PRINT TAB(5);"at";TAB(18);"UTC"
- 1240 PRINT:PRINT
- 1250 PRINT TAB(5);"Azimuth";TAB(22);"degrees"
- 1260 PRINT TAB(5);"Elevation";TAB(22);"degrees"
- 1270 PRINT TAB(5);"Distance";TAB(27);"Km"
- 1280 PRINT:PRINT
- 1290 PRINT TAB(5);"2m - shift";TAB(31);"Hz"
- 1300 PRINT TAB(5);"70cm - shift";TAB(31);"Hz"
- 1310 PRINT TAB(5);"23cm - shift";TAB(31);"Hz"
- 1320 PRINT TAB(5);"Time delay (2way)";TAB(42);"ms"
- 1330 PRINT
- 1340 PRINT TAB(5);"Satellite's Longitude";TAB(42);"degrees"
- 1350 PRINT TAB(5);"Satellite's Latitude ";TAB(42);"degrees"
- 1360 PRINT TAB(5);"MA (Apogee=128, Perigee=255)"
- 1370 XCOORD=53
- 1380 LOCATE 1,XCOORD : PRINT TAB(56)"DX STATE INFORMATION"
- 1390 LOCATE 2,XCOORD : PRINT TAB(53)"_________________ AZ _ EL _"
- 1400 FOR YCOORD = 3 TO 19 STEP 1
- 1410 READ STATE$,STATE.LAT,STATE.LON
- 1420 LOCATE YCOORD,53 : DrawText STATE$ : ' print STATE$
- 1430 NEXT YCOORD
- 1440 RESTORE 3366
- 1450 GOTO 1750
- '
- DiskData:
- 1460 ' ----------------------------------------------------
- 1470 ' *** MASK FOR DATA TO DISK ***
- 1475 ' ==============================
- 1480 CALL TEXTSIZE(12)
- 1483 PRINT "Time of end UTC (hhmm): ";
- 1485 GOSUB TimeOfEnd
- 1488 PRINT UTCEND$ : PRINT ULINE$
- 1490 UHEND=VAL(LEFT$(UTCEND$,2)) : UMEND=VAL(RIGHT$(UTCEND$,2))
- 1500 PRINT"How many days? ";
- 1505 GOSUB NbrOfDays
- 1508 PRINT DAYS:PRINT ULINE$
- 1510 IF DAYS < 1 THEN DAYS = 1
- 1520 OPEN"O",#1,file$+".ELL"
- 1530 CLS
- 1540 PRINT
- 1550 PRINT
- 1560 PRINT" CALCULATION OF THE SATELLITE ";NA$
- 1570 PRINT" =================================="
- 1580 PRINT:PRINT
- 1590 PRINT"Station Longitude ";STATION.LON*PI081;" degrees"
- 1600 PRINT"Station Latitude ";STATION.LAT*PI081;" degrees"
- 1610 PRINT
- 1620 PRINT"The Satellite ";NA$;" will be computed for ";DAYS; "DAY(S)."
- 1630 PRINT:PRINT
- 1640 ' *** TO DISK *
- 1650 PRINT#1,
- 1660 PRINT#1,
- 1670 PRINT#1," CALCULATION OF THE SATELLITE ";NA$
- 1680 PRINT#1," ====================================="
- 1690 PRINT#1,:PRINT#1,
- 1700 PRINT#1,"Station longitude ";STATION.LON*PI081;" degrees"
- 1710 PRINT#1,"Station latitude ";STATION.LAT*PI081;" degrees"
- 1720 PRINT#1,
- 1730 PRINT#1," The Satellite "; NA$;" will be computed for ";DAYS;"DAY(S)."
- 1740 PRINT#1, : PRINT#1,
- 1750 KZ=-1
- 1760 GOSUB 6500 : ' DATE STRING
- 1770 GOSUB 8000 : ' LONG TIME CORRECTION
- 1780 '
- 1790 GOSUB 5000 : ' TIME STRING
- 1799 '
- 1800 ' *** SUBSATEL. - POSITION ***
- 1805 ' =============================
- 1810 PE=ARG.OF.PERIGEE*PI180+DB*(DT+Z)
- 1820 EQ = RA.OF.NODE*PI180+PB*(DT+Z)
- 1830 M=MEAN.ANOMALY/360+DT*(MEAN.MOTION+ME)/2
- 1840 K1=Z*ME
- 1850 NR=INT(CSNG(M+K1))
- 1860 K2=M-INT(CSNG(M))
- 1870 M=K1+K2
- 1880 M=(M-INT(CSNG(M)))*PI2
- 1890 MA=INT(CSNG(M*255/PI2+.5))
- 1895 '
- 1900 ' *** KEPLER-EQUATION ****
- 1910 ' ==================================
- 1920 EW=M+ECCENTRICITY*SIN(M)*(1+ECCENTRICITY*COS(M))
- 1930 K1=(M-EW+ECCENTRICITY * SIN(EW))/(1-ECCENTRICITY * COS(EW))
- 1940 IF ABS(K1) < .000000001# THEN 1970
- 1950 EW=EW+K1
- 1960 GOTO 1930
- 1970 V=PI05-FNASN((ECCENTRICITY-COS(EW))/(ECCENTRICITY*COS(EW)-1))
- 1980 IF M>PI THEN V=PI2-V
- 1990 D1=FNASN(SIN(PE+V)*SIN.INCLINATION)
- 2000 A1=PI2+ATN(TAN(PE+V)*COS.INCLINATION)+EQ+PI*(COS(PE+V)<0)
- 2010 R=A*(1-ECCENTRICITY*COS(EW))
- 2020 SZ = 1.73993 + .0172027912# * X
- 2030 SZ=SZ-INT(CSNG(SZ/PI2))*PI2+6.30038867#*Z
- 2040 SAT.LON=SZ-A1
- 2050 SAT.LAT=D1+.003345*RE/R*SIN(2*D1)
- 2060 LON=INT(CSNG(SAT.LON*PI081+.5))MOD 360
- 2070 IF LON<-180 THEN LON=LON+360
- 2080 LAT=INT(CSNG(SAT.LAT*PI081+.5))
- 2090 SIN.SAT.LAT=SIN(SAT.LAT)
- 2100 COS.SAT.LAT=COS(SAT.LAT)
- 2110 '
- 2120 ' *** AZ/EL/DX/SHIFT ***
- 2115 ' ========================
- 2130 K1=PI05-FNASN(SIN.SAT.LAT*SIN.STATION.LAT+COS.SAT.LAT*COS.STATION.LAT*COS(SAT.LON-STATION.LON))
- 2140 EL=ATN((COS(K1)-RE/R)/SIN(K1))
- 2150 AZ=PI05-FNASN((SIN.SAT.LAT-SIN.STATION.LAT*COS(K1))/COS.STATION.LAT/SIN(K1))
- 2160 IF SIN(SAT.LON-STATION.LON)>=0 THEN AZ=PI2-AZ
- 2170 DX=R*SIN(K1)/COS(EL)
- 2180 K1=(KD-DX)/(SZ-KZ-PI2*(KZ>SZ))*.000000000243239# : KD=DX : KZ=SZ
- 2190 S2=INT(CSNG(K1*146000000#+.5))
- 2200 S7=INT(CSNG(K1*436000000#+.5))
- 2210 S3=INT(CSNG(K1*1268000000#+.5))
- 2212 CoordX = 463/360 * (PI081*AZ)+ 7
- 2215 CoordY = 268 - (268/60 * (PI081*EL) )+ 5
- 2220 EL=INT(CSNG(PI081*EL+.5))
- 2230 AZ=INT(CSNG(PI081*AZ+.5))
- 2240 DX=INT(CSNG(DX+.5))
- 2250 '
- 2260 ' *** PRINT IN FORM ***
- 2270 ' *** INTERRUPT-ROUTINE ***
- 2280 ' =============================
- 2290 IF INKEY$="" THEN 2360
- 2300 LOCATE 1,1 : PRINT" ";
- 2310 LOCATE 1,1 : PRINT" Interrupted. Space to Continue, Any Key to Stop. ";
- 2320 INTERRUPT$=INKEY$
- 2330 IF INTERRUPT$="" THEN 2320
- 2340 LOCATE 1,1 : PRINT" Any Key to Interrupt. ";
- 2350 IF INTERRUPT$ <> " " THEN CLS : RESET : RESTORE 3366: OLDDAY=0 : GOTO 70
- 2360 ON Key% GOTO 3020,3020,3390,3610
- 2365 '
- 3000 ' *** REAL AND STEP ***
- 3010 ' ========================
- 3020 LOCATE 3,18 : PRINT RIGHT$(" "+ DATUM$,10)
- 3030 LOCATE 4,18 : PRINT NR+EPOCH.REV
- 3040 LOCATE 5,8 : PRINT U$;
- 3050 LOCATE 8,15 : PRINT " ";
- 3055 LOCATE 8,15 : PRINT AZ;
- 3060 LOCATE 9,15 : PRINT EL;
- 3070 LOCATE 10,19 : PRINT DX;
- 3080 LOCATE 13,21 : PRINT S2;
- 3090 LOCATE 14,21 : PRINT S7;
- 3100 LOCATE 15,21 : PRINT S3;
- 3110 LOCATE 16,30 : PRINT INT(CSNG(2*DX/299290!)*1000 +.5);
- 3120 LOCATE 18,34 : PRINT LON;
- 3130 LOCATE 19,34 : PRINT LAT;
- 3140 LOCATE 20,10 : PRINT MA;" "
- 3150 '
- 3160 ' *** AZ/EL FOR DX STATE INFORMATION ***
- 3165 ' ==========================================
- 3170 FOR YCOORD=3 TO 19 STEP 1
- 3180 READ STATE$,STATE.LAT,STATE.LON
- 3190 STATE.LAT=STATE.LAT*PI180
- 3200 SIN.STATE.LAT=SIN(STATE.LAT)
- 3210 COS.STATE.LAT=COS(STATE.LAT)
- 3220 STATE.LON=STATE.LON*PI180
- 3230 K1=PI05-FNASN(SIN.SAT.LAT*SIN.STATE.LAT+COS.SAT.LAT*COS.STATE.LAT*COS(SAT.LON-STATE.LON))
- 3240 EL=ATN((COS(K1)-RE/R)/SIN(K1))
- 3250 AZ=PI05-FNASN((SIN.SAT.LAT-SIN.STATE.LAT*COS(K1))/COS.STATE.LAT/SIN(K1))
- 3260 IF SIN(SAT.LON-STATE.LON)>=0 THEN AZ=PI2-AZ
- 3270 EL=INT(CSNG(PI081*EL+.5))
- 3280 AZ=INT(CSNG(PI081*AZ+.5))
- 3290 LOCATE YCOORD,70 : PRINT AZ;
- 3300 LOCATE YCOORD,75 : PRINT EL;
- 3310 NEXT YCOORD
- 3320 RESTORE 3366
- 3330 LOCATE 1,22
- 3340 '
- 3350 '
- 3360 GOTO 4000
- 3365 '
- ' *** DATA FOR DX STATE INFORMATION BOARD ***
- ' ==============================================
- ' STATE LAT LON
- 3366 DATA "NEW YORK", 40.75, 74
- DATA "SAN FRANCISCO", 37.58, 122.5
- DATA "RIO DE JANEIRO", -23, 43.2
- DATA "SANTIAGO DE CHILE",-33, 81
- DATA "TAHITI", -18, 148
- DATA "FALKLAND IS.", -52, 60
- DATA "CAPE TOWN", -33.92, 341.63
- DATA "SINGAPORE", 1.3, 256.15
- DATA "HONG KONG", 22.2, 245.75
- DATA "TOKIO", 35.75, 220.25
- DATA "DARWIN", -12.33, 229.1
- DATA "PERTH", -31.95, 244.13
- DATA "SYDNEY", -33.88, 208.83
- DATA "WELLINGTON", -41.317, 185.23
- DATA "HAWAII", 21.313, 157.87
- DATA "VANCOUVER", 49, 137
- DATA "FAIRBANKS", 65, 147.66
- ' END OF DATA
-
- 3370 ' **** STORE DATA ON DISK ***
- 3380 ' ==============================
- 3390 IF DAYS=OLDDAY THEN 3450
- 3400 PRINT : CALL TEXTSIZE (12)
- 3410 PRINT TAB(8);"ORBITS from ";NA$;" for ";DATUM$
- 3420 PRINT" DIRECTION and DISTANCE SUB.-POSITION"
- 3430 PRINT"ORBIT # TIME AZ EL [km] LON LAT MA"
- 3440 PRINT"------------------------------------------------------"
- 3445 CALL TEXTSIZE (9)
- 3450 PRINT NR+EPOCH.REV;TAB(9);LEFT$(U$,5);" UTC";TAB(19);AZ;TAB(24);EL;TAB(28);DX;TAB(36);LON;TAB(42);LAT;TAB(48);MA
- 3460 IF DAYS<1 THEN CLOSE#1: GOTO 100
- 3470 IF UH<UHEND THEN GOTO 3500
- 3480 IF UM<UMEND THEN GOTO 3500
- 3490 IF DAYS <2 THEN CLOSE#1 : GOTO 100
- 3500 IF DAYS=OLDDAY THEN 3570
- 3510 PRINT#1,
- 3520 PRINT#1,TAB(10);"ORBITS from ";NA$;" for ";DATUM$
- 3530 PRINT#1," DIRECTION and DISTANCE SUB.-POSITION"
- 3540 PRINT#1,"ORBIT# TIME AZ EL [km] LON LAT MA"
- 3550 PRINT#1,"------------------------------------------------------"
- 3560 OLDDAY=DAYS
- 3570 IF EL<=-2 THEN 3590
- 3580 PRINT#1,NR+EPOCH.REV;TAB(9);LEFT$(U$,5);" UTC";TAB(19);AZ;TAB(24);EL;TAB(28);DX;TAB(36);LON;TAB(42);LAT;TAB(48);MA
- 3590 GOTO 4000
-
- 3600 ' *** AZ-EL PLOT ***
- 3605 ' ====================
- 3610 GOSUB PlotSat
- 3660 LOCATE 1,7 :PRINT NA$
- 3665 LOCATE 1,16 :PRINT"on";
- 3669 LOCATE 1,19 : PRINT DATUM$;
- 3670 LOCATE 2,14 : PRINT NR+EPOCH.REV;
- 3680 LOCATE 25,12 : PRINT U$;
- 3690 PRINT TAB (31) AZ;
- 3700 PRINT TAB (48) EL;
- 3710 PRINT TAB (61) DX;
- 3720 '
- 4000 ' *** INCREMENT TIME ***
- 4010 ' ========================
- 4020 IF Key%<>1 THEN 4060
- 4022 ON TIMER (8) GOSUB Increment
- 4026 TIMER ON
- 4030 IdleLoop:
- GOTO IdleLoop
- 4035 ' TIMER OFF
- 4040 IF US>59 THEN UM=UM+1 : US=US-60
- 4050 GOTO 4070
- 4060 US=0 : UM=UM+I%
- 4070 IF UM>59 THEN UM= UM-60: UH=UH+1
- 4080 IF UH>23 THEN UH=0 : GOSUB 6000 : ' KALENDER
- 4090 IF UM>59 THEN GOTO 4070
- 4100 GOTO 1790
- 4110 '
- 5000 ' *** UTC-STRING/TIME ***
- 5010 ' ==========================
- 5020 K1=100+UH : K2 = 100+UM : K3 = 100 + US
- 5030 U$=RIGHT$(STR$(K1),2)+":"+RIGHT$(STR$(K2),2)+":"+RIGHT$(STR$(K3),2)
- 5040 Z=(UH+UM/60 + US/3600)/24
- 5050 RETURN
- 5060 '
- 6000 ' *** JULIAN DATE ***
- 6010 ' =====================
- 6020 DAYS=DAYS-1
- 6030 K1=TX : K2=MX : K3 = X : TX = 1 : MX =1 : JX = JX+1 : GOSUB 6540
- 6040 IF X = K3+1 THEN 6080
- 6050 MX=K2+1 : JX =JX-1 : GOSUB 6540
- 6060 IF X = K3+1 THEN 6080
- 6070 TX = K1+1 : MX=K2 : GOSUB 6540
- 6080 DATUM$=STR$(TX)+"."+RIGHT$(STR$(MX),LEN(STR$(MX))-1)+"."+RIGHT$(STR$(JX),4)
- 6090 DATUM$=RIGHT$(DATUM$,LEN(DATUM$)-1)
- 6100 GOSUB 8000
- 6110 RETURN
- 6120 '
- 6500 K1=VAL(DATUM$)
- 6510 TX=INT(CSNG(K1))
- 6520 MX=INT(CSNG(VAL(RIGHT$(DATUM$,LEN(DATUM$)-LEN(STR$(TX))))))
- 6530 JX=INT(CSNG(VAL(RIGHT$(DATUM$,LEN(DATUM$)-LEN(STR$(TX)+STR$(MX))))))
- 6540 MY=MX+1 : JY=JX
- 6550 IF MX < 3 THEN MY=MY+12 : JY = JY-1
- 6560 X=INT(CSNG(365.25*JY))+INT(CSNG(30.6*MY))+TX-694024!-INT(CSNG(.75*INT(CSNG(JY/100+1))))
- 6570 RETURN
- 6580 '
- 8000 ' *** LONG-TIME CORRECTION ***
- 8010 ' ===============================
- 8020 DT=X-T0-EPOCH.TIME
- 8030 ME=MEAN.MOTION+DECAY.RATE*DT
- 8040 TU = 2880/(MEAN.MOTION+ME+DB/PI)
- 8050 K1=TU/84.491
- 8060 K2=K1^(7/3)*(1-ECCENTRICITY*ECCENTRICITY)^2
- 8070 K3=DB
- 8080 DB=.0869452/K2*(5*COS.INCLINATION*COS.INCLINATION-1)
- 8090 IF ABS(K3-DB)>.0000001 THEN 8040
- 8100 PB= -.17389046#/K2*COS.INCLINATION
- 8110 A = RE*K1^(2/3)
- 8120 RETURN
- 8130 '
- 9000 ' *** CURSOR ADRESSING ***
- 9010 ' ==========================
- 9020 LOCATE YCOORD,XCOORD : ' VTAB(FIX(ycoord)) HTAB(FIX(xcoord))
- 9030 RETURN
- 9040 '
- 10205 '
- 12000 ' *** ERROR TRAPPING ROUTINE ***
- 12010 ' ===============================
- 12020 IF ERR=53 OR ERR=64 THEN RESUME 810
- 12030 item% = 0
- STR1$ = "Error #" + STR$(ERR)
- STR2$ = " in Line " + STR$(ERL)
- STR3$ = " "
- STR4$ = "Resume Program..."
- 12040 Alert ref%,3,308,item%,STR1$,STR2$,STR3$,STR4$
- 12050 '
- 12060 RESUME 70
- 12070 END
-
- 14900 '
- 14950 ' *** Utility for printing parameters ***
- 14999 ' =====================================
- 15000 CLS : PRINT:PRINT:PRINT TAB(10) NA$
- 15100 PRINT : PRINT :
- 15150 PRINT TAB (10) "Epoch.Time = ";EPOCH.TIME
- 15200 PRINT TAB (10) "Reference Date = ";DATUM$
- 15300 PRINT TAB (10) "Inclination = ";INCLINATION
- 15400 PRINT TAB (10) "RA of Node = ";RA.OF.NODE
- 15500 PRINT TAB (10) "Excentricity = ";EXCENTRICITY
- 15600 PRINT TAB (10) "Arg. of Perigee = ";ARG.OF.PERIGEE
- 15700 PRINT TAB (10) "Mean Anomaly = ";MEAN.ANOMALY
- 15800 PRINT TAB (10) "Mean Motion = ";MEAN.MOTION
- 15900 PRINT TAB (10) "Decay Rate = ";DECAY.RATE
- 16000 PRINT TAB (10) "Epoch Revolution = ";EPOCH.REV
- 16001 END
- 16900 '
- 16950 ' *** Utility for changing filetype ***
- 16999 ' ==================================
- 17000 CLS
- 17010 file$ = FILES$(1)
- 17020 INPUT "ENTER NEW FILETYPE: ", passwd$
- 17030 NAME file$ AS file$,passwd$
- 17040 PRINT "ok"
- 17050 END
-
- ' ******** S U B R O U T I N E S *********
- MenuInit:
- 20000 '
- 20010 TEXTMODE (0)
- 20020 ' MENU 2,0,0,""
- 20030 MENU 3,0,0,""
- 20032 MENU 4,0,0,""
- 20033 MENU 5,0,0,""
- 20035 ' Turn OFF normal Menus
- 20100 MENU 4,0,1,"Mode"
- 20110 MENU 4,1,1,"Realtime Tracking"
- 20120 MENU 4,2,1,"Step Tracking"
- 20130 MENU 4,3,1,"Data to Disk"
- 20140 MENU 4,4,1,"AZ/EL Projection"
- 20150 MENU 4,5,1,"New Parameters"
- 20152 MENU 4,6,1,"-----------------"
- 20155 MENU 4,7,1,"Exit to Desktop"
- ' $IGNORE ON
- 20160 MENU 4,8,1,"Exit to Basic"
- ' $IGNORE OFF
- 20170 MENU 4,6,0
- CmdKey 4,1,"R"
- CmdKey 4,2,"S"
- CmdKey 4,3,"D"
- CmdKey 4,4,"A"
- CmdKey 4,5,"N"
- CmdKey 4,7,"Q"
- true = -1
- 20190 RETURN
-
- HandleMenu:
- Key% = MENU(1)
- MENU 4,0,0 : ' disable menu
- GOTO 568
- RETURN
- Scale:
- TEXTMODE (1)
- YCOORD = 23 -23/60*20
- LOCATE YCOORD, 1
- PRINT "- [20]";
- YCOORD = 23 -23/60*40
- LOCATE YCOORD, 1
- PRINT "- [40]";
- XCOORD = 77/360 * 90 +2
- GOSUB Bar
- XCOORD = 77/360 * 180+ 2
- GOSUB Bar
- XCOORD = 77/360 * 270+2
- GOSUB Bar
- XCOORD = 77+2
- GOSUB Bar
- TEXTMODE (0)
- RETURN
- Bar:
- LOCATE 23, XCOORD
- PRINT "|";
- RETURN
-
- 35000 EnterDate:
- DAY$ = DATE$
- YEAR$ = RIGHT$(DAY$,2)
- MON$ = LEFT$(DAY$,2)
- IF LEFT$(MON$,1) = "0" THEN MON$ = RIGHT$(MON$,1)
- DAY$ = MID$(DAY$,4,2)
- IF LEFT$(DAY$,1) = "0" THEN DAY$ = RIGHT$(DAY$,1)
- DATUM$ = DAY$+"."+MON$+"."+YEAR$
- WINDOW 2, "Current date",(270,75) - (490,125),1
- PRINT " Enter current Date (dd.mm.yy): "
- CALL TEXTFACE (1)
- EDIT FIELD 1, DATUM$,(15,25) - (83,40)
- WHILE DIALOG (0) = 1 : WEND
- BUTTON 1,2, "OK",(105,20) - (135,45)
- WHILE DIALOG (0) <> 1 : WEND
- DATUM$ = EDIT$ (1)
- ButtonPushed = DIALOG(1)
- WINDOW CLOSE 2
- CALL TEXTFACE (0)
- RETURN
-
- 36000 EnterTime:
- U$ = TIME$
- HH$ = LEFT$(U$,2)
- MM$ = MID$(U$,4,2)
- U$ = HH$+MM$
- WINDOW 3, "Time",(300,75) - (480,125),1
- PRINT "Enter Time (UTC) (hhmm): "
- CALL TEXTFACE (1)
- EDIT FIELD 1, U$,(15,25) - (60,40)
- WHILE DIALOG (0) = 1 : WEND
- BUTTON 1,2, "OK",(105,20) - (135,45)
- WHILE DIALOG (0) <> 1 : WEND
- U$ = EDIT$ (1)
- ButtonPushed = DIALOG(1)
- WINDOW CLOSE 3
- CALL TEXTFACE (0)
- RETURN
- 37000 EnterSteprate:
- WINDOW 4, "Steprate ",(300,75) - (470,125),1
- PRINT " Enter Steprate (min): "
- CALL TEXTFACE (1)
- EDIT FIELD 1, "60",(15,25) - (48,40)
- WHILE DIALOG (0) = 1 : WEND
- BUTTON 1,2, "OK",(105,20) - (135,45)
- WHILE DIALOG (0) <> 1 : WEND
- I% = VAL(EDIT$ (1))
- ButtonPushed = DIALOG(1)
- WINDOW CLOSE 4
- CALL TEXTFACE (0)
- RETURN
- 38000 TimeOfEnd:
- WINDOW 3, "Time of End",(300,75) - (480,125),1
- PRINT "Enter Time (UTC) (hhmm): "
- CALL TEXTFACE (1)
- EDIT FIELD 1, "2359",(15,25) - (60,40)
- WHILE DIALOG (0) = 1 : WEND
- BUTTON 1,2, "OK",(105,20) - (135,45)
- WHILE DIALOG (0) <> 1 : WEND
- UTCEND$ = EDIT$ (1)
- ButtonPushed = DIALOG(1)
- WINDOW CLOSE 3
- CALL TEXTFACE (0)
- RETURN
- 39000 NbrOfDays:
- WINDOW 2, "Number of Days",(300,75) - (480,125),1
- PRINT "Number of Days: "
- CALL TEXTFACE (1)
- EDIT FIELD 1, "5",(15,25) - (40,40)
- WHILE DIALOG (0) = 1 : WEND
- BUTTON 1,2, "OK",(105,20) - (135,45)
- WHILE DIALOG (0) <> 1 : WEND
- DAYS = VAL(EDIT$ (1))
- ButtonPushed = DIALOG(1)
- WINDOW CLOSE 2
- CALL TEXTFACE (0)
- RETURN
- 40000 NewLocation:
- CALL TEXTFACE (1)
- WINDOW 4, "Station Location",(270,75) - (480,125),1
- PRINT "Do you wish a new Location? "
- CALL TEXTFACE (1)
- WHILE DIALOG (0) = 1 : WEND
- BUTTON 1,1, "Yes",(55,20) - (85,45),1
- BUTTON 2,2, "No", (105,20) - (135,45),1
- WHILE DIALOG (0) <> 1 : WEND
- ButtonPushed = DIALOG(1)
- IF ButtonPushed = 1 THEN Key$ = "Y" ELSE Key$ = "N"
- WINDOW CLOSE 4
- CALL TEXTFACE (0)
- RETURN
-
- 41000 PlotSat:
- IF CoordY > 273 THEN RETURN
- PSET(CoordX,CoordY),33
- RETURN
- 42000 Increment: ' increments time
- US=US+10
- GOTO 4040
- RETURN
-
-
- Kepler:
- 50000 '
- 50010 ' Sat Nov 28, 1987 07:31:23
- 50020 GOTO 50090
- ' ******************************
- ' ** Programm zur Eingabe der **
- ' ** KEPLER Elemente **
- ' ** 19.7.87 **
- ' ******************************
- 50080 '
- 50090 CLS : ' DEFDBL A-Z
- 50100 PRINT " Satellite Parameters "
- 50105 PRINT "Use decimal point <.> and include leading zeroes."
- 50110 PRINT: INPUT "Name of Satellite : ", NA$
- 50120 INPUT "Reference Date (dd.mm.yy): ", DATUM$
- 50130 PRINT "Enter Epoch Time"
- 50140 INPUT " hours : "; HOURS
- 50150 INPUT " minutes : "; MINUTES
- 50160 INPUT " seconds : "; SECONDS
- 50170 EPOCH.TIME =(HOURS+MINUTES/60 + SECONDS/3600)/24
- 50180 PRINT : PRINT TAB(12) "Epoch.Time = "EPOCH.TIME
- 50190 IF EPOCH.TIME > 0 THEN GOTO 50220
- 50200 PRINT
- 50210 INPUT "Epoch.Time : ",EPOCH.TIME
- 50220 INPUT "Inclination (deg) : ",INCLINATION
- 50230 INPUT "RA of Node (deg) : ",RA.OF.NODE
- 50240 INPUT "Excentricity : ",EXCENTRICITY
- 50250 INPUT "Arg of Perigee (deg) : ",ARG.OF.PERIGEE
- 50260 INPUT "Mean Anomaly (deg) : ",MEAN.ANOMALY
- 50270 INPUT "Mean Motion (rev/day) : ",MEAN.MOTION
- 50280 INPUT"Decay Rate (rev/day^2) : ",DECAY.RATE
- 50290 INPUT "Epoch Rev. : ",EPOCH.REV
- 50500 CLS : PRINT:PRINT:PRINT TAB(10) NA$
- 50510 PRINT : PRINT :
- 50515 PRINT TAB (10) "Epoch.Time = ";EPOCH.TIME
- 50520 PRINT TAB (10) "Reference Date = ";DATUM$
- 50530 PRINT TAB (10) "Inclination = ";INCLINATION
- 50540 PRINT TAB (10) "RA of Node = ";RA.OF.NODE
- 50550 PRINT TAB (10) "Excentricity = ";EXCENTRICITY
- 50560 PRINT TAB (10) "Arg. of Perigee = ";ARG.OF.PERIGEE
- 50570 PRINT TAB (10) "Mean Anomaly = ";MEAN.ANOMALY
- 50580 PRINT TAB (10) "Mean Motion = ";MEAN.MOTION
- 50590 PRINT TAB (10) "Decay Rate = ";DECAY.RATE
- 50600 PRINT TAB (10) "Epoch Revolution = ";EPOCH.REV
- 50610 PRINT : PRINT TAB (10) : INPUT "Is this correct? (Y/N) ",Key$
- 50620 IF Key$ = "Y" OR Key$ = "y" THEN GOTO 50700
- 50630 IF Key$ = "N" OR Key$ = "n" THEN GOTO 50090
- 50640 GOTO 50610
- 50700 NB$ = NA$+".PAR"
- 51000 OPEN "O",#1,NB$
- 51010 WRITE#1,NA$,DATUM$,EPOCH.TIME;EPOCH.REV;INCLINATION;RA.OF.NODE;EXCENTRICITY;ARG.OF.PERIGEE;MEAN.ANOMALY;MEAN.MOTION;DECAY.RATE
- 51020 CLOSE#1
- 51030 NAME NB$ AS NB$,"PARA"
-